﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using DataAccess;
using DevExpress.XtraEditors;
using NLog;
using QuanLyKhachSan.TemplateReport;

namespace QuanLyKhachSan
{
    public partial class TabDichVu :XtraUserControl, IGeneatetabName
    {
        private static Logger _logger = LogManager.GetCurrentClassLogger();
        private DichVuManager _dvManager = new DichVuManager();

        public TabDichVu()
        {
            InitializeComponent();
             _dvManager = new DichVuManager();
        }

        public string Getname()
        {
            return "Dịch Vụ";
        }

        private void LoadDb()
        {
            try
            {
                var acResult = _dvManager.GetAllServices();
                if (acResult.Sucess())
                    dgvCustomers.DataSource = acResult.Result;
                else
                    Logs(acResult);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
            }
        }

        private void RefreshGridView()
        {
          List<DichVu> listDichVus = _dvManager.GetAllServices().Result;
          dgvCustomers.DataSource = listDichVus;
        }

        private void TabDichVu_Load(object sender, EventArgs e)
        {
            LoadDb();
            //Load Db cbbKhachHang
        }

        private void Add_Click()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác thêm dịch vụ");
            var frmDichVuCapNhat = new FormDichVuCapNhat();
            if (frmDichVuCapNhat.ShowDialog()==DialogResult.OK)
            {
                XtraMessageBox.Show("Thêm thành công..");
                RefreshGridView();
            }
        }

        private void Delete_Click()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác cập xóa");
            var confirm = XtraMessageBox.Show("Bạn có chắc chắn xóa không", "Xác nhận", MessageBoxButtons.YesNo,
                MessageBoxIcon.Question);
            if (confirm == DialogResult.Yes)
            {
                foreach (var selectedRow in gridView1.GetSelectedRows())
                {
                    try
                    {
                        var rowDel = gridView1.GetRow(selectedRow) as DichVu;
                        _dvManager.Delete(rowDel);
                    }
                    catch (Exception ex)
                    {
                        _logger.Info(ex);
                    }
                }
                LoadDb();
            }
        }

        private void Update_Click()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác cập nhật");
            var dichVuSelected = GetRowSelected();
            if (dichVuSelected != null)
            {
                var frm = new FormDichVuCapNhat(dichVuSelected) {btnThaoTac = {Text = "Cập nhật"}};
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    XtraMessageBox.Show("Cập nhật thành công");
                    RefreshGridView();
                }
            }
        }

        private void TimKiem_Click()
        {
            var frmTimDichVu = new FormTimDichVu();
            if ( frmTimDichVu.ShowDialog()==DialogResult.OK)
            {
                XtraMessageBox.Show("Kết quả tìm thấy là: " + frmTimDichVu.Result.Count());
                dgvCustomers.DataSource = frmTimDichVu.Result.ToList();
            }
        }

        private void barButtonRefesh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            LoadDb();
        }

        private static void Logs(ActionResult listResult)
        {
            foreach (var ex in listResult.Exceptions)
            {
                _logger.Error(ex.Message);    
            }
        } 

        private DichVu GetRowSelected(){
            try
            {
                int rowSelected = gridView1.GetSelectedRows()[0];
                return gridView1.GetRow(rowSelected) as DichVu;
            }
            catch (Exception)
            {
                XtraMessageBox.Show("Vui lòng chọn dịch vụ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return null;
            }
        }

        private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {
            //update row when edited
            var dv = GetRowSelected();
            var rs = _dvManager.InsertOrUpdate(dv);
            if (rs.Sucess())
            {
                LoadDb();
                XtraMessageBox.Show(rs.Sucess() ? "Cập nhật thành công" : rs.GetErrorMessage());
            }
        }

        private void barButtonItemThem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Add_Click();
        }

        private void btnExport_Click()
        {
            _logger.Info(Commons.ToString() + ", In danh sách dịch vụ");
            var reportDich = new XtrpDichVu();
            try
            {
                var report = new FormReport(reportDich);
                report.ShowDialog();
            }
            catch (Exception)
            {
                XtraMessageBox.Show("Vui lòng đảm bảo tồn tại dữ liệu trước khi in");
            }
        }

        private void btnprintsPDF_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            btnExport_Click();
        }

        private void dtpNgaySuDung_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            XtraMessageBox.Show("change date");
        }

        private void btnThem_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            Add_Click();
        }

        private void btnXoa_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            Delete_Click();
        }

        private void btnCapNhat_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            Update_Click();
        }

        private void btnTimKiem_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            TimKiem_Click();
        }

        private void barTim_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gridView1.OptionsFind.AlwaysVisible = !gridView1.OptionsFind.AlwaysVisible;
        }

        private void ctXoaHoaDon_Click(object sender, EventArgs e)
        {
            Delete_Click();
        }

        private void barXoa_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Delete_Click();
        }

        private void barCapNhat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Update_Click();
        }
    }
}
